package com.ccom.base.controller;


import com.ccom.base.service.SysBaseService;
import com.ccom.core.common.constant.ServiceNameConstants;
import com.ccom.core.common.model.dto.message.*;
import com.ccom.core.common.model.Result;
import com.ccom.redis.util.RedisUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 服务化 system模块 对外接口请求类
 */
@Slf4j
@Api(tags = "base controller")
@RestController
@RequestMapping(ServiceNameConstants.BASE_SERVICE_URL_PREFIX)
public class SysBaseController {

    @Autowired
    private SysBaseService sysBaseService;

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 1发送系统消息
     *
     * @param message 使用构造器赋值参数 如果不设置category(消息类型)则默认为2 发送系统消息
     */
    @PostMapping("/sys/api/sendSysAnnouncement")
    public Result sendSysAnnouncement(@RequestBody MessageDTO message) {
        sysBaseService.sendSysAnnouncement(message);
        return Result.success();
    }

    /**
     * 2发送消息 附带业务参数
     *
     * @param message 使用构造器赋值参数
     */
    @PostMapping("/sys/api/sendBusAnnouncement")
    public void sendBusAnnouncement(@RequestBody BusMessageDTO message) {
        sysBaseService.sendBusAnnouncement(message);
    }

    /**
     * 3通过模板发送消息
     *
     * @param message 使用构造器赋值参数
     */
    @PostMapping("/sys/api/sendTemplateAnnouncement")
    public void sendTemplateAnnouncement(@RequestBody TemplateMessageDTO message) {
        sysBaseService.sendTemplateAnnouncement(message);
    }

    /**
     * 4通过模板发送消息 附带业务参数
     *
     * @param message 使用构造器赋值参数
     */
    @PostMapping("/sys/api/sendBusTemplateAnnouncement")
    public void sendBusTemplateAnnouncement(@RequestBody BusTemplateMessageDTO message) {
        sysBaseService.sendBusTemplateAnnouncement(message);
    }

    /**
     * 5通过消息中心模板，生成推送内容
     *
     * @param templateDTO 使用构造器赋值参数
     * @return
     */
    @PostMapping("/sys/api/parseTemplateByCode")
    public String parseTemplateByCode(@RequestBody TemplateDTO templateDTO) {
        return sysBaseService.parseTemplateByCode(templateDTO);
    }

    /**
     * 26给指定用户发消息
     *
     * @param userIds
     * @param cmd
     */
    @GetMapping("/sys/api/sendWebSocketMsg")
    public void sendWebSocketMsg(@RequestParam("userIds") String[] userIds, @RequestParam("cmd") String cmd) {
        sysBaseService.sendWebSocketMsg(userIds, cmd);
    }

    /**
     * 40发送邮件消息
     *
     * @param email
     * @param title
     * @param content
     */
    @GetMapping("/sys/api/sendEmailMsg")
    public void sendEmailMsg(@RequestParam("email") String email, @RequestParam("title") String title, @RequestParam("content") String content) {
        sysBaseService.sendEmailMsg(email, title, content);
    }

}
